Skip to content

其实问题 ​

本节目标:理解“其实问题”的核心思路,并能把它用于实际开发或面试表达。 我又把交易相关代码过了一遍,结合外汇/CFD 经纪商面试里常问、且你项目里真有实现的点,整理在下面。前面我们已经写过行情 Worker、WS、K 线、SLTP、NumericInput、万级持仓等,这里刻意避开重复讲同一套,只补「还喜欢问、且项目里能对上代码」的维度。

一、面试高频 × 你项目里可对上的技术点 ​

1. Bid/Ask 与订单方向(最容易被问错的「教科书题」) ​

  • 为什么买用 ask、卖用 bid?持仓的 CURRENT_PRICE 用哪边价?挂单又用哪边?
  • 代码:src/views/(public)/trading/_utils/orderPrice.ts 里 applyQuoteToOrder、calculateOrderCurrentPrice(持仓)与 calculatePendingOrderCurrentPrice(挂单)区分开——这是面试官用来筛「有没有真做过终端」的经典题。
  • 简历一句:统一封装「持仓 / 挂单」两套 bid-ask 取值规则,避免盈亏与可成交量和后台口径不一致。

2. 限价单是 Limit 还是 Stop(由现价与委托价相对位置决定) ​

  • 代码:src/views/(public)/trading/_utils/position.ts 的 getLimitOrderCmd,useOrderBuilder 里组 SocketCmd 前会走这套分支;限价等于现价时直接拦掉并提示(useOrderBuilder)。
  • 简历一句:在前端显式推导 Buy/Sell Limit vs Stop,并与当前价校验,减少无效单与后端拒单。

3. 市场开闭市、节假日、多时区(能不能下单不止看「有没有报价」) ​

  • 代码:MarketStatusWrapper.vue 消费 marketCalendarStore.allSymbolMarketStatus,requestSnapshot + Worker 日历(你之前的亮点 4);另有 useMarketStatus.ts 按 sessions_trade + server_offset_seconds 本地算下一档触发时间。
  • 简历一句:交易面板与日历 Worker 联动,仅在市场明确 isOpen 时渲染下单区,闭市展示下次开盘时间(UTC)。

4. 保证金、最大可开手数、手数步长(Pre-trade / 规格驱动) ​

  • 代码:TradePanel.vue 手数绑定 min_volume / max_volume / step_volume;AccountInfo.vue 里用 margin_in_user_currency 和 margin_free 用 Decimal 算 maxTradable,并按 min_volume 向下取整到步长。
  • 简历一句:手数输入与「按账户币种折算后的每手保证金」联动,约束最大可开手数,避免用户填出后端必拒的单。

5. 点差、Digits、报价有效性(展示与风控习惯) ​

  • 代码:calculateSpread(pips 整数化)、品种 DIGITS 驱动价格展示;SLTP / NumericInput 等多处与 digits、step 对齐(你已有多条亮点)。
  • 简历一句:点差与价格精度与品种规格绑定,保证列表与面板和 MT 口径一致。

6. 批量平仓 / 批量改 SLTP:部分失败怎么展示 ​

  • 代码:OrderTabs.vue 里 Promise.allSettled + processBatchResults(src/utils/batchOperationHelper.ts),失败时用 VNode 多行展示每张 ticket 的错误。
  • 简历一句:批量指令前端聚合结果,支持部分失败时的结构化错误展示,而不是一句笼统失败。

7. 部分平仓与折叠/对冲行(业务规则 + 并发防重) ​

  • 代码:handlePartialClose 对折叠行按子单 Math.min(请求手数, 子单手数) 拆 lots 数组;closeOpenOrder 用 closingOpenTickets / operationId 防重复点。
  • 简历一句:折叠持仓下一次平仓请求映射为多 ticket 按比例/上限拆手数,并做 ticket 级防重复提交。

8. 订单提交路径:幂等感、防抖、通知合并 ​

  • 代码:useOrderSubmit 里 500ms 最小间隔 + submitting;通知用 payload.seq 作 key 替换同一条「进行中→成功/失败」。
  • 简历一句:Socket 下单层做提交节流与通知单例,降低弱网重复点击与通知洪水。

9. 「多空力道」类情绪/占比条 + 外网延迟观测 ​

  • 代码:TradeForceBar.tsx 定时拉 get_ratio,useTradingNetworkStatus 用往返时间更新外部延迟(给交易体验一个可观测指标)。
  • 简历一句:下单面板旁路展示后端聚合的多空占比,并把 HTTP 采样延迟纳入网络状态,辅助排查卡顿。

10. 账户动态字段与风控心智(和持仓 Worker 形成闭环) ​

  • 代码:useOpenPosition watch totalFloatingPL 推 equity / margin_fee / level_now(你已展开过万级持仓);类型里还有 MarginLevel、server_offset_seconds、leverage 等字段可与面试延伸。

二、这些要不要单独写进简历 ​

  • 不必每一条都占一条「Top 亮点」,否则会和 SLTP、NumericInput、万级持仓、WS、K 线抢篇幅。
  • 推荐写法:在「交易终端」项目描述里加 1 段「订单与报价语义」子 bullet,把 (1)(2)(4) 合成一句;再加 1 段「批量与部分平仓」 把 (6)(7)(8) 合成一句;开闭市 (3) 若简历篇幅够可并入「多时区日历 Worker」那条,写「消费端:交易面板 gating」。

三、示范简历短句(可直接粘贴改编) ​

  1. Bid/Ask 与订单类型:封装持仓/挂单两套报价取用规则,并基于现价与限价自动区分 Limit/Stop,限价等于现价时前置拦截,保证与 MT 下单语义一致。
  2. 规格驱动 + 保证金:手数输入严格绑定 min/max/step volume,并结合账户币种保证金折算计算理论最大可开手数(Decimal 对齐步长)。
  3. 批量与部分平仓:批量 sendCmd 使用 allSettled + 可渲染的多行错误;折叠持仓部分平仓按子单手数拆单;ticket 级防重复提交。
  4. 开闭市:交易面板仅在日历 Worker 判定 isOpen 时渲染下单区,闭市展示下次开盘,避免无效下单请求。

四、面试官可能追问的「深入题」(你可提前准备) ​

  • 持仓盈亏若完全信服务端 PUSH,为什么还要本地因子近似?(你项目里是 __profitFactor + 报价批处理那条线。)
  • Limit vs Stop 在 Buy 侧为什么是「委托价低于现价 → Limit」?画条数轴一句话说清。
  • 若 margin_in_user_currency 与 margin_free 币种不一致怎么办?(看你们是否保证已折算到账户币。)
  • 批量操作「部分成功」产品上要 retry 还是人工逐条处理?你们当前是展示逐 ticket 错误。

若你希望,我可以把上述内容 直接合并进你之前那份「Top 8 + 技术亮点清单」,标成「交易语义与风控展示」一节,避免和 Worker/WS 条目重复表述。

本站总访问 — 次